在当今快节奏的软件开发环境中,效率和速度往往是决定项目成功与否的关键因素。Avue,一个基于Element-plus的低代码前端框架,以其独特的JSON配置方式,为开发者提供了一种快速生成页面的方法,极大地提升了开发效率。本文将深入探讨Avue框架的配置项,帮助开发者快速上手并充分利用这一强大的工具。
一、Avue-crud 配置项简介
Avue框架的核心在于其crud(创建、读取、更新、删除)配置项,这些配置项允许开发者通过JSON格式定义页面的布局和行为。通过这种方式,开发者可以避免编写大量的HTML和JavaScript代码,从而加快开发速度。
:option="option" //表格配置属性 :table-loading="loading" //表格等待框的控制,加载的时候转圈圈,设置true/false :search.sync="search" //搜索的变量(需要sync修饰符) :visible.sync="changeInfo" //是否显示,设置true/false :data="data" //表格显示的数据 :page.sync="page" //表格分页配置选项(需要sync修饰符) :permission="permissionList" //权限控制 :before-open="beforeOpen" //打开前的回调function(file,column) v-model="form" //数据模型 用来存取页面值的 ref="crud" //在普通的 DOM 元素上使用,引用指向的就是 DOM 元素 @cell-click="pageto" //表格点击运行方法 onclick方法定义 @row-update="rowUpdate" //更新数据后确定触发该事件 @row-save="rowSave" //新增数据后点击确定触发该事件 @row-del="rowDel" //行数据删除时触发该事件 @row-click="handleRowClick" //单击行运行的方法 @search-change="searchChange" //点击搜索后触发该事件 @search-reset="searchReset" //清空搜索回调方法 @selection-change="selectionChange" //当选择项发生变化时会触发该事件 @current-change="currentChange" //点击页码会调用current-change方法回调当前页数 @size-change="sizeChange" //点击每页多少条会调size-change方法回调 @refresh-change="refreshChange" //点击刷新按钮触发该事件 @on-load="onLoad" //打开表格页面的方法,一般用来初始化,返回页面数据 > 二、crud之option解释 option配置项是Avue中定义页面行为的核心部分,它包括了数据源、分页、排序等关键属性。通过合理配置option,开发者可以控制数据的加载、显示和交互方式。 option: { height:'auto', //表格高度 calcHeight: 30, //表格高度差 searchShow: true, //首次加载是否显示搜索 searchMenuSpan: 4, //搜索按钮长度 searchSpan:6, //搜索框长度 最大长度24 border: true, //表格边框是否显示 index: true, //是否显示序号 indexLabel:'序号', //并将索引字段设置为“序号” viewBtn: true, //是否显示查看按钮 selection: true, //表格勾选列(即批量删除) dialogClickModal: false, //是否可以通过点击modal关闭Dialog addBtn:false, //是否显示添加按钮 editBtn:false, //是否显示编辑按钮 delBtn:false, //是否显示删除按钮 excelBtn:false, //表格导出按钮是否显示 labelWidth:120, //表单前面的标题长度 searchLabelWidth:80, //搜索项标题长度 refreshBtn: false, //表格上面小的 刷新按钮 columnBtn: false, //表格上面小的 列表按钮 searchBtn: false, //表格上面小的 搜索按钮 menu: true, //是否显示操作栏 menuWidth:300, //表格操作列宽度 dialogWidth: '80%', //弹出表单的弹窗宽度 saveBtnText:'保存', //保存按钮文案 updateBtnText:'修改', //修改按钮文案 cancelBtnText:'取消', //取消按钮文案 addBtnText:'新增', //新增按钮文案 editBtnText:'编辑', //编辑按钮文案 delBtnText:'删除', //删除按钮文案 viewBtnText:'查看', //查看按钮文案 searchBtnText:'搜索', //搜索按钮文案 emptyBtnText:'清空', //清空按钮文案 dialogClickModal: false, //去掉'点击屏幕空白区就关闭弹框'属性 searchShowBtn: true, //栏目折叠显隐 header:false, //隐藏表格头部操作 refreshBtn: true, //刷新 columnBtn: true, //操作列显隐 excelBtn: false, //导出Excel printBtn: false, //表格打印导出 filterBtn: false, //筛选 } 三、crud之column解释 column配置项用于定义表格中的列。每个列可以包含标签(label)、属性(prop)、显示/隐藏(display)等属性。通过精细配置列,开发者可以控制表格的展示效果和数据的交互。 column: [ { label: "用户名", //表格的标题 prop: "username", //表格的key width: "150", //表格的宽度 fixed: true, //是否冻结列 hide:true, //是否隐藏列 index:true, //是否显示表格序号 默认值:false visdiplay:true, //表单不显示 overHidden: true, //超出用省略号显示 rules: [{ //表单校验规则 required: true, //是否必填 message: "请输入用户名", //提示信息 trigger: "blur" }], addDisabled: true, //添加的时候禁止修改 editDisabled: true, //编辑的时候禁止修改 disabled:true, //禁止编辑 addDisplay: false, //新增时是否显示 editDisplay: false, //编辑时是否显示 viewDisplay: false, //查看时是否显示 display: false, //在查看,新增,编辑页面是否显示 span: 24, //span:24一条数据占一行,span:8一行3条数据 sortable:true, //排序方式切换,倒序、正序切换 search: true, //添加可搜索框 searchPlaceholder:"请选择合同来源", //搜索框辅助文字 align:"center", //表单数据居中 row: true, //是否单独成行 searchOrder:1 //搜索项位置排序,序号越大越靠前 searchLabel:'时间', } ] 四、crud之group解释 group配置项允许开发者将表单字段分组,使得页面布局更加清晰和有组织。每个分组可以有自己的标签(label)、属性(prop)和图标(icon),还可以控制是否显示箭头(arrow)等。 group: [ { label: '基本信息', prop: 'jbxx', icon: 'el-icon-edit-outline', display: true, column: [ { label: "主体类型", prop: "relType1", search: false, span: 8, editDisabled: true, }, { label: "主体名称", prop: "name", span: 8, search: false, editDisabled: true, } ] }, { label: '申请信息', prop: 'jbxx', span: 8, icon: 'el-icon-edit-outline', arrow: true, column: [ { label: "申请类型", prop: "breedType1", span: 8, hide: true, editDisabled: true, } ] }, ] 五、column类型写法 Avue支持多种类型的输入控件,包括基础输入框、下拉选择框、时间控件、计数选择器、单选框、上传图片框、多行文本域框、级联选择器、子表单、颜色控件、数组、超链接以及富文本编辑器等。每种控件都有其特定的配置方式,以满足不同的业务需求。 基础输入框 { "label": "广告标题", "prop": "title", "rules": [ { "required": true, "message": "请输入广告标题", "trigger": "blur" } ] } 下拉选择框 { "label": "设备负责人", "prop": "deviceUserId", "type": "select", "dicUrl": "/api/blade-system/dict/dictionary?code=supplierLvl", "props": { "label": "dictValue", "value": "dictKey" }, "filterable": true, "rules": [ { "required": true, "message": "请输入设备负责人", "trigger": "blur" } ] } 时间控件框 { label: "年份", prop: "yearTime", rules: [{ required: true, message: "请输入年份", trigger: "blur" }], type: "year", //类型为年份 format: "yyyy", valueFormat: "yyyy", //限制能选择的时间范围 pickerOptions: { // 禁用年份日期通过 disabledDate 设置 disabledDate(time) { return time.getTime() < Date.now(); }, } }, { label: "开始时间", prop: "startTime", type: "date", //类型为日期 format: "yyyy-MM-dd", valueFormat: "yyyy-MM-dd", rules: [{ required: true, message: "请选择开始日期", trigger: "blur" }], }, { label: "开始时间", prop: "startTime", type: "datetime", //类型为日期+时间 format: "yyyy-MM-dd HH:mm:ss", valueFormat: "yyyy-MM-dd HH:mm:ss", rules: [{ required: true, message: "请选择开始时间", trigger: "blur" }], }, { label: "时间范围", prop: "Time", type: "datetimerange", //类型为时间范围 searchRange: true, //开启范围搜索 format: "yyyy-MM-dd HH:mm:ss", valueFormat: "yyyy-MM-dd HH:mm:ss", rules: [{ required: true, message: "请选择时间范围", trigger: "blur" }], }, 计数选择器 { label: "权重", prop: "sort", type: 'number', //类型为数字 minRows: 0, //最小数字为0 tip: '只能填写数字,数字越大广告排序越前', //提示语 rules: [{ required: true, message: "请选择权重", trigger: "blur" }], }, 单选框 { label: "是否发布", prop: "isPublish", type:'radio', //类型为单选框 dicData: [ { label: "发布", value: 1 }, { label: "停用", value: 0 }, ], rules: [{ required: true, message: "请选择是否发布", trigger: "blur" }], }, 上传图片框 { label: "图片地址", prop: "photo", type:'upload', drag: true, //拖拽上传类型 action: '/api/blade-resource/file/upload', //上传路径 //返回数据结构体配置 propsHttp: { res: 'data', //返回结构体的层次 url:'url', //上传成功返回结构体的图片地址 home:'http://tzhb.zhisuaninfo.com/pic/' //图片的根路径地址 }, dataType: 'string', //正常是数组格式,添加这个属性就变成了string格式传给接口 data: { dir: 'paymentList'} , //指定上传参数 imgWidth:100, //图片宽度 imgHeight:100, //图片高度 listType:'picture-img', //图片列表类型 rules: [{ required: true, message: "请上传图片", trigger: "blur" }], }, 多行文本框 { label: "供应项目", prop: "projects", minRows: 5, //最小行/最小值 type: "textarea", //类型为多行文本域框 maxlength:500, //最大输入长度 }, 联级选择器 { label: "归属系统", prop: "systemId", rules: [{ required: true, message: "请输入归属系统", trigger: "blur" }], dicUrl: "/api/blade-property/devicesystemtype/allSystemTypeTree",//字典远程字典(填接口路径) type: 'cascader', //类型为:级联选择器 props: { label: "name", //远程字典接口对应显示字段 value: "id" //远程字典接口对应传值字段 }, filterable: true, //添加filterable属性即可启用搜索功能 checkStrictly: true, //可以选择任意一级 searchCheckStrictly:true, //可以选择任意一级(在搜索框中起作用) search:true, }, 子表单 { label: "子表单内容", prop: "RoomTollInfo", type: "dynamic", //类型为子表单(可新增删除) span: 24, labelPosition:'top', //子表单标题 children: { align: "center", column: [ { label: "价格", prop: "price", },{ label: "合同编号", prop: "contractNum", hide:true }] } }, 颜色控件 { label: "主题颜色", prop: "color", type: 'color', value:"", //默认值 disabled:true, //是否禁用 colorFormat:"hex", //颜色格式 showAlpha:false, //颜色格式 predefine: [ '#ff4500', '#ff8c00', '#ffd700' ], //预定义颜色 }, 数组 { label:'数组', prop:'array', dataType:'number', propsHttp:{ home:'http://demo.cssmoban.com', }, type:'array' } 超链接 { label:'超链接', prop:'href', type:'url' }, 引入第三方组件-富文本编辑器 main.js注册全局引入: import avueUeditor from 'avue-plugin-ueditor'; Vue.component('avueUeditor', avueUeditor); { label:'机构介绍', prop: "institutionIntroduce", component: 'AvueUeditor', options: { action: '/api/blade-resource/oss/endpoint/put-file', props: { res: "data", url: "link", } }, }, 结语 Avue框架以其低代码的特性,为前端开发带来了革命性的改变。通过本文的介绍,我们可以看到,无论是简单的文本输入还是复杂的富文本编辑,Avue都能够通过简洁的JSON配置快速实现。希望本文能够帮助开发者更好地理解和使用Avue,从而提升开发效率,创造出更多优秀的前端应用。